/*
 * Copyright 2023, Haiku, Inc.
 * Distributed under the terms of the MIT License.
 */
#ifndef LOONGARCH64_DEBUG_CPU_STATE_H
#define LOONGARCH64_DEBUG_CPU_STATE_H


#include <SupportDefs.h>


struct loongarch64_debug_cpu_state {
	// 通用寄存器
	uint64 r0;   // 零寄存器
	uint64 ra;   // 返回地址寄存器
	uint64 tp;   // 线程指针寄存器
	uint64 sp;   // 栈指针寄存器
	uint64 a0;   // 函数参数/返回值寄存器
	uint64 a1;   // 函数参数/返回值寄存器
	uint64 a2;   // 函数参数寄存器
	uint64 a3;   // 函数参数寄存器
	uint64 a4;   // 函数参数寄存器
	uint64 a5;   // 函数参数寄存器
	uint64 a6;   // 函数参数寄存器
	uint64 a7;   // 函数参数寄存器
	uint64 t0;   // 临时寄存器
	uint64 t1;   // 临时寄存器
	uint64 t2;   // 临时寄存器
	uint64 t3;   // 临时寄存器
	uint64 t4;   // 临时寄存器
	uint64 t5;   // 临时寄存器
	uint64 t6;   // 临时寄存器
	uint64 t7;   // 临时寄存器
	uint64 t8;   // 临时寄存器
	uint64 s0;   // 保存寄存器
	uint64 s1;   // 保存寄存器
	uint64 s2;   // 保存寄存器
	uint64 s3;   // 保存寄存器
	uint64 s4;   // 保存寄存器
	uint64 s5;   // 保存寄存器
	uint64 s6;   // 保存寄存器
	uint64 s7;   // 保存寄存器
	uint64 s8;   // 保存寄存器
	uint64 pc;   // 程序计数器

	// 浮点寄存器
	double f0;
	double f1;
	double f2;
	double f3;
	double f4;
	double f5;
	double f6;
	double f7;
	double f8;
	double f9;
	double f10;
	double f11;
	double f12;
	double f13;
	double f14;
	double f15;
	double f16;
	double f17;
	double f18;
	double f19;
	double f20;
	double f21;
	double f22;
	double f23;
	double f24;
	double f25;
	double f26;
	double f27;
	double f28;
	double f29;
	double f30;
	double f31;
};


#endif	// LOONGARCH64_DEBUG_CPU_STATE_H